package com.cskaoyan.javase.array._2memory;

/**
 * 默认值:
 * 栈上存储的局部变量,是没有默认值的,必须手动初始化赋值以后才能够使用.包括基本数据类型变量,以及引用数据类型的引用.
 *
 * 堆上对象中的元素具有默认值,这个默认值是JVM在创建对象时自动给出的,这个过程称之为"默认初始化"
 * 也就是说堆上的元素是具有默认值的,无需手动初始化赋值,它就是直接可用的
 *
 * 对象中各种数据类型元素的默认值为:
 * 整形（byte、short、int、long）默认值为0
 * 浮点类型（float、double）默认值为0.0
 * 字符类型（char）默认值是'\u0000' 表示编码值为0的字符，一个绝对空字符。
 * 布尔类型（boolean）默认值是false
 * 如果对象中的元素是引用数据类型,那么它的默认值是null
 *      null是空常量,是一个字面值常量
 *      它是引用数据类型变量的一种特殊取值
 *      引用等于null表示引用指向虚无,反正没有指向一个对象
 *      这时引用是不可用的,是不能使用一个等于null的引用来操作对象的
 *
 * @since 10:22
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo2 {
    public static void main(String[] args) {
        int a;
        // System.out.println(a);
        int[] arr;
        // System.out.println(arr);

        double[] arr2 = new double[3];
        System.out.println(arr2[0]);

        char[] arr3 = new char[3];
        // 默认值是"\u0000" 绝对空字符
        System.out.println(arr3[0] + "123");
        System.out.println(arr3[1]);

        boolean[] arr4 = new boolean[2];
        System.out.println(arr4[0]);

        String str = null;
        String[] arr5 = new String[3];
        System.out.println(arr5[0]);
    }
}
